/*
 * @Author: 0x9DEFA478
 * @Date: 2022-01-22 23:03:13
 * @LastEditTime: 2022-08-21 14:22:23
 * @LastEditors: 0x9DEFA478
 * @Description: 
 * QQ:2652450237
 * ============================================================================================================================================
 * 
 * 
 * 
 *                                                                                               ************      ****************************
 *                                                                                             ************      ****************************  
 *                                                                                           ************      ****************************    
 *                                                                                         ************      ****************************      
 *                                                                                       ************      ************                        
 *                                                                                     ************      ************                          
 *                                                                                   ************      ************                            
 *                                                                                 ************      ************                              
 *                                                                               ************      ************                                
 *                                                                             ************      ************                                  
 *                                                                           ************      ************                                    
 *                                                                         ************      ************                                      
 *                                                                       ************      ************                                        
 *                                                                     ************      ************                                          
 *                                                                   ************      ************                                            
 *                                                                 ************      ************                                              
 *                                                               ************      ************                                                
 *                                                             ************      ************                                                  
 *                                                           ************      ************                                                    
 *                                                         ************      ************                                                      
 *                                                       ************      ************                                                        
 *                                                     ************      ************                                                          
 *                                                   ************      ************                                                            
 *                                                 ************      ************                                                              
 *                                               ************      ************                                                                
 *                                             ************      ************                                                                  
 *                                           ************      ************                                                                    
 *                                         ************      ************                                                                      
 *                                       ************      ************                                                                        
 *                                     ************      ************                                                                          
 *                                   ************      ************                                                                            
 *                                 ************      ************                                                                              
 *                               ************      ************                                                                                
 *                             ************      ************                                                                                  
 *                           ************      ************                                                                                    
 *                         ************      ************                                                                                      
 *       ****************************      ************                                                                                        
 *     ****************************      ************                                                                                          
 *   ****************************      ************                                                                                            
 * ****************************      ************                                                                                              
 * 
 * 
 * 
 * ============================================================================================================================================
 * 
 */
#ifndef __Console_H_NES_CPU_H_
#define __Console_H_NES_CPU_H_
#include "./H_NES_APU.h"




#define vH_NES_CPU_Register_P_N                                   0x80U
#define vH_NES_CPU_Register_P_V                                   0x40U

//位4与位5只会在堆栈中存在(不为0)
#define vH_NES_CPU_Register_P_B_Msk                               0x30U
#define vH_NES_CPU_Register_P_PHP_BRK                             0x30U
#define vH_NES_CPU_Register_P_IRQ                                 0x20U
#define vH_NES_CPU_Register_P_NMI                                 0x20U

#define vH_NES_CPU_Register_P_D                                   0x08U
#define vH_NES_CPU_Register_P_I                                   0x04U
#define vH_NES_CPU_Register_P_Z                                   0x02U
#define vH_NES_CPU_Register_P_C                                   0x01U




#define vH_NES_CPU_Status_DMA                                     0x0001U
#define vH_NES_CPU_Status_OpcodeStart                             0x0002U  //为Mapper提供的标志位 当开始执行指令时设置
#define vH_NES_CPU_Status_NMI_Suspend                             0x0100U
#define vH_NES_CPU_Status_NMI_AckSuspend                          0x0200U
#define vH_NES_CPU_Status_IRQ_APUDMCIRQ                           0x0400U
#define vH_NES_CPU_Status_IRQ_APUFrameIRQ                         0x0800U
#define vH_NES_CPU_Status_IRQ_ExtIRQ                              0x1000U
#define vH_NES_CPU_Status_IRQ_CountInc                            0x2000U
#define vH_NES_CPU_Status_IRQ_CountMsk                            0xE000U
#define vH_NES_CPU_Status_IRQ_CountMax                            0x0000U
#define vH_NES_CPU_Status_IRQ_Msk                                 (vH_NES_CPU_Status_IRQ_APUDMCIRQ|vH_NES_CPU_Status_IRQ_APUFrameIRQ|vH_NES_CPU_Status_IRQ_ExtIRQ)
#define vH_NES_CPU_Status_ActiveMsk                               (vH_NES_CPU_Status_DMA|vH_NES_CPU_Status_NMI_Suspend|vH_NES_CPU_Status_NMI_AckSuspend|vH_NES_CPU_Status_IRQ_Msk|vH_NES_CPU_Status_IRQ_CountMsk)




typedef struct{

  Hint32 MCLK;

  struct{
    Hbyte A;
    Hbyte X;
    Hbyte Y;
    Hbyte S;//堆栈指针
    Huint16 PC;
    Hbyte P;
  }Register;

  Hint8 APU_Clock;//用于为APU计时

  //总线
  struct{

    void* RAM;

  }Bus;

  Huint16 Status;

  struct{
    Huint16 OAMADDR;
  }DMA;

  
  H_NES_APU APU;

  
}H_NES_CPU;




#endif //__Console_H_NES_CPU_H_
